7 辅助工具使用教程
7.1 env环境部署
依赖环境: Python3.6及以上
依赖库安装:
Pymatgen库 :使用
pip install pymatgen
安装;Statsmodels库 :使用
pip install statsmodels
安装;Dspawpy库 :使用
pip install -i https://test.pypi.org/simple/ dspawpy==0.3.0
安装;
7.2 rho电荷密度数据处理
DS-PAW使用 pymatgen 的画图程序来显示的二维数据,使用 VESTA 来显示三维数据。以应用教程中Si体系的 band.json
和 dos.json
为例子:
在计算目录中新建一个 trans_rho.py 文件,内容如下:
1 import json
2 from dspawpy.io import write_VESTA_format
3
4 with open("./rho.json","r") as file:
5 rho = json.load(file)
6
7 write_VESTA_format(rho["AtomInfo"], [rho["Rho"]["TotalCharge"]], "DS-PAW-rho.vesta")
第1,2行为需要导入的 python 库函数;
第4,5行为需要读取的
json
文件;第7行为执行 write_VESTA_format 函数,将数据保存为VESTA可识别的格式,其中 rho[“AtomInfo”] 为读取
rho.json
中的晶格及坐标信息, [rho[“Rho”][“TotalCharge”]] 为rho.json
中总的电荷密度的三维数据,DS-PAW-rho.vesta
表示生成的 vesta 格式数据;
执行 python trans_rho.py ;
得到转换后的文件
DS-PAW-rho.vesta
,将其重命名为CHGCAR.vasp
以便在 VESTA 显示;将
CHGCAR.vasp
文件拖入VESTA中则可得到如下的电荷密度图
7.3 band能带数据处理
以不开自旋时的MoS2体系的 band.json
为例子:
(1) 普通能带处理 :
创建 bandplot.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import BSPlotter
2from dspawpy.io import get_band_data
3
4band_data = get_band_data("./band.json")
5
6bsp = BSPlotter(bs=band_data)
7plt = bsp.get_plot()
8plt.savefig("bandplot.png",img_format="png")
9plt.show()
第1、2行为需要导入的 python 库函数,这里用到了pymatgen中的 BSPloter 库,以及 dspawpy.io 中的
get_band_data
函数;第4行为读取
band.json
文件构造 band_data 这个结构体;第6行为调用BSPloter处理 band_data 数据;
第7行为使用
bsp
下面的 get_plot 进行画图;第8行为保存图片的名称和格式,将数据保存为png格式命名为 bandplot.png ;
第9行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将该行注释,之后打开 bandplot.png 文件查看。
执行 python bandplot.py
生成
bandplot.png
文件
知识点:
Pymatgen中主要用到 electronic_structure.plotter 模块,基本上该模块下的80%的功能都能使用;
dspawpy.io 模块为 DS-PAW 的接口模块;
使用 get_band_data 函数可以将 DS-PAW 计算得到的 band.json 文件转化为 pymatgen 支持的格式;
使用 BSPlotter 模块获取到 DS-PAW 计算的 band.json 的数据;
使用 BSPlotter 模块中 get_plot 函数绘制能带图;
使用 savefig 函数可以将能带图以不同格式保存;
使用 show 函数能够直接显示能带图,如果用户的机器上不支持图形界面,可以用#注释 show函数;
执行代码可以得到以下能带图:
(2) 将能带投影到每一种元素然后分别作图,通过线条的粗细来表示该元素对该轨道的贡献 :
创建 bandplot_elt_projected.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import BSPlotterProjected
2from dspawpy.io import get_band_data
3
4band_data = get_band_data("./band.json")
5
6# 构建投影band数据实例
7bsp = BSPlotterProjected(bs=band_data)
8# 绘制按元素投影图片,返回matplotlib.pyplot
9plt = bsp.get_elt_projected_plots()
10plt.savefig("bandplot_elt_projected.png",img_format="png")
11plt.show()
知识点:
用户如果需要绘制能带投影的数据,此时需要使用 BSPlotterProjected模块;
使用 BSPlotterProjected模块中 get_elt_projected_plots 函数能够绘制每种元素对轨道贡献的能带图;
执行代码可以得到以下能带图:
(3) 将能带投影到每一种元素然后分别作图,通过不同的颜色来表示该元素对该轨道的贡献:
创建 bandplot_elt_projected_color.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import BSPlotterProjected
2from dspawpy.io import get_band_data
3
4band_data = get_band_data("./data/band.json")
5
6bsp = BSPlotterProjected(bs=band_data)
7# 绘制投影到元素band图片,返回matplotlib.pyplot({'Mo':['d'],'S':['s']})
8plt = bsp.get_elt_projected_plots_color()
9plt.savefig("bandplot_elt_projected_color.png",img_format="png")
10plt.show()
知识点:
使用 BSPlotterProjected模块中 bandplot_elt_projected_color 函数能够绘制每种元素对轨道贡献的能带图,用红绿蓝三原色来表示 spd轨道;
执行代码可以得到以下能带图:
(4) 能带投影到不同元素的不同轨道(L):
创建 bandplot_projected.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import BSPlotterProjected
2from dspawpy.io import get_band_data
3
4band_data = get_band_data("./data/band.json")
5
6bsp = BSPlotterProjected(bs=band_data)
7
8# 绘制投影到元素某些轨道band,返回matplotlib.pyplot
9plt = bsp.get_projected_plots_dots({'Mo':['d'],'S':['s']})
10plt.savefig("bandplot_projected.png",img_format="png")
11plt.show()
知识点:
使用 BSPlotterProjected模块中 get_projected_plots_dots可以让用户来自定义需要绘制的某种元素某种轨道(L)的能带图;
例如 get_projected_plots_dots ({‘Mo’:[‘d’],’S’:[‘s’]})就是绘制Mo的d轨道和S的s轨道;
执行代码可以得到以下能带图:
(5) 将能带投影到不同原子的不同轨道(M):
创建 bandplot_plots_dots_patom_pmorb.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import BSPlotterProjected
2from dspawpy.io import get_band_data
3
4band_data = get_band_data("./band.json")
5bsp = BSPlotterProjected(bs=band_data)
6
7plt = bsp.get_projected_plots_dots_patom_pmorb(dictio={'Mo':['px','py','pz']}, dictpa={'Mo':[1]})
8
9plt.savefig("bandplot_projected_plots_dots_patom_pmorb.png",img_format="png")
10plt.show()
第1、2行为需要导入的 python 库函数,这里用到了pymatgen中的 BSPloter 库,以及 dspawpy.io 中的
get_band_data
函数;第4行为读取
band.json
文件构造 band_data 这个结构体;第5行为调用 BSPlotterProjected 处理 band_data 数据;
第7行为使用
bsp
下面的 get_projected_plots_dots 进行画图,用户可以根据自己的体系和需要绘制的投影轨道对参数进行修改;第9行为保存图片的名称和格式,这里将数据保存为png格式命名为 bandplot_projected_plots_dots_patom_pmorb.png ;
第10行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将该行注释,之后打开 png 文件查看。
知识点:
使用 BSPlotterProjected模块中 get_projected_plots_dots_patom_pmorb 的自由度更高,可以让用户来自定义需要绘制的某种原子某种轨道 (M) 的能带图;
dictpa指定原子,dictio 指定该原子的轨道;
get_projected_plots_dots_patom_pmorb函数中还可以使用 sum_atoms 功能将多个原子的贡献相加,该功能用户可以自行根据使用方法进行尝试;
注意:get_projected_plots_dots_patom_pmorb函数中序号是从1开始的;
执行代码可以得到以下能带图:
7.4 dos态密度数据处理
以应用教程中的反铁磁NiO体系的 dos.json
为例子:
(1) 总的态密度 :
创建 dosplot_total.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import DosPlotter
2from dspawpy.io import get_dos_data
3
4dos_data = get_dos_data("dos.json")
5dos_plotter = DosPlotter(stack=False,zero_at_efermi=True)
6dos_plotter.add_dos('total dos',dos=dos_data)
7
8plt = dos_plotter.get_plot()
9plt.savefig("dos_total.png",img_format="png")
10plt.show()
第1、2行为需要导入的 python 库函数,这里用到了pymatgen中的 BSPloter 库,以及
dspawpy.io
中的get_dos_data
函数;第4行为读取
dos.json
文件构造 dos_data 这个结构体;第5行为调用
DosPlotter
处理 dos_data 数据,括号中 stack=False 表示态密度作图方式为曲线, stack=True 表示作图方式为面积, zero_at_efermi 控制是否将零点设为费米能级;第6行使用
add_dos
来定义要处理的对象 dos ,调用前边定义好的dos对象dos_data
第8行使用
dos_plotter
下面的 get_plot 进行画图;第9行为保存图片的名称和格式,这里将数据保存为png格式命名为 dos_total.png ;
第10行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将第该行注释,之后打开 png 文件查看。
知识点:
使用 get_dos_data 函数可以将DS-PAW计算得到的 dos.json 文件转化为 pymatgen 支持的格式;
使用 DosPlotter模块获取到DS-PAW计算的 dos.sjon 的数据;
DosPlotter函数可以传递参数:stack参数表示画态密度是否加阴影, zero_at_efermi 表示是否在态密度图中进行将费米能量置零,这里设置 stack=False , zero_at_efermi=False ;
使用 DosPlotter 模块中 add_dos 获取态密度的数据;
DosPlotter模块中 et_plot函数 绘制态密度图;
执行代码可以得到以下态密度图:
(2) 将态密度投影到不同的轨道上(L):
创建 dosplot_spd.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import DosPlotter
2from dspawpy.io import get_dos_data
3
4dos_data = get_dos_data("dos.json")
5dos_plotter = DosPlotter(stack=False,zero_at_efermi=True)
6dos_plotter.add_dos_dict(dos_data.get_spd_dos())
7
8plt = dos_plotter.get_plot()
9plt.savefig("dos_spd.png",img_format="png")
10plt.show()
第1、2行是导入需要的 python 库函数,这里用到了 pymatgen 中的 DosPlotter 库,以及 dspawpy.io 中的
get_dos_data
函数;第4行为读取
dos.json
文件构造 dos_data 这个结构体;第5行为调用BSPlotterProjected处理 dos_data 数据,括号中 stack=False 表示态密度作图方式为曲线, stack=True 表示作图方式为面积, zero_at_efermi 控制是否将零点设为费米能级;
第6行使用
add_dos_dict
获取投影信息,对dos_data
进行 get_spd_dos 操作,获得投影到轨道的信息;第7行为保存图片的名称和格式,这里将数据保存为png格式命名为 dos_spd.png ;
第8行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将该行注释,之后打开 dos_spd.png 文件查看。
知识点:
使用 DosPlotter模块中 add_dos_dict 函数 获取投影态密度的数据,之后使用 get_spd_dos 将投影信息按照 spd 轨道投影输出;
执行代码可以得到以下态密度图:
(3) 将态密度投影到不同的元素上 :
创建 dosplot_element.py 文件,具体代码如下:
1# 导入pymatgen DosPlotter模块
2from pymatgen.electronic_structure.plotter import DosPlotter
3# 导入读取DS-PAW dos.json数据模块
4from dspawpy.io import get_dos_data
5
6
7dos_data = get_dos_data("dos.json")
8dos_plotter = DosPlotter(stack=False,zero_at_efermi=True)
9
10#按元素添加dos
11dos_plotter.add_dos_dict(dos_data.get_element_dos())
12
13#返回matplotlib.pyplot
14plt = dos_plotter.get_plot()
15plt.savefig("dos_element.png",img_format="png")
16plt.show()
知识点:
使用 DosPlotter模块中 add_dos_dict 函数 获取投影态密度的数据,之后使用 get_element_dos 将投影信息按照不同元素投影输出;
执行代码可以得到以下态密度图:
(4) 将态密度投影到不同的元素的不同轨道(M)上:
创建 dosplot_element_orbital.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import DosPlotter
2from pymatgen.electronic_structure.core import Orbital
3from dspawpy.io import get_dos_data
4
5dos_data = get_dos_data("dos.json")
6dos_plotter = DosPlotter(stack=False,zero_at_efermi=False)
7dos_plotter.add_dos("Ni dxy",dos_data.get_site_orbital_dos(dos_data.structure[0],Orbital(4)))
8#dos_plotter.save_plot("dos_element_orbital.png",img_format="png")
9dos_plotter.show()
知识点:
使用 get_site_orbital_dos函数 提取dos数据中特定原子,特定轨道的贡献,这是获取第2个原子的第5个轨道的态密度 dos_data.structure[0],Orbital(4) ;
之后使用 DosPlotter模块中 add_dos函数 进行画图;
注意:get_site_orbital_dos函数中序号是从0开始的;
执行代码可以得到以下态密度图:
(5) 将态密度投影到不同的原子的t2g轨道和eg轨道上:
以应用案例NiO的反铁磁计算得到的 dos.json
为例,
创建 dosplot_t2g_eg.py 文件,具体代码如下:
1from pymatgen.electronic_structure.plotter import DosPlotter
2from dspawpy.io import get_dos_data
3
4dos_data = get_dos_data("./dos.json")
5dos_plotter = DosPlotter(stack=False,zero_at_efermi=True)
6dos_plotter.add_dos_dict(dos_data.get_site_t2g_eg_resolved_dos(dos_data.structure[1]))
7dos_plotter.save_plot("dos_t2g_eg.png",img_format="png")
8dos_plotter.show()
第1,2行为需要导入的 python 库函数,这里用到了pymatgen中的 DosPlotter 库,以及我们自己写的
dspawpy.io
中的 get_dos_data 函数;第4行为读取
dos.json
文件构造dos_data
结构体;第5行为调用DosPlotter处理dos_data数据,括号中 stack=False 表示态密度作图方式为曲线, stack=True 表示作图方式为面积, zero_at_efermi 控制是否将零点设为 费米能级 ;
第6行使用 add_dos_dict 获取 投影信息 ,对dos_data进行 get_site_t2g_eg_resolved_dos 操作,获得 投影到轨道 的信息;
第7行为保存图片的名称和格式,这里将数据保存为png格式命名为 dos_t2g_eg.png ;
第8行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将该行注释了,之后打开 dos_t2g_eg.png 文件查看。
执行 python dosplot_t2g_eg.py ;
生成
dos_t2g_eg.png
文件
知识点:
使用 get_site_t2g_eg_resolved_dos函数 提取dos数据中特定原子的 t2g和 eg轨道的贡献,这是获取第1个原子的t2g和eg轨道的贡献;
之后使用 DosPlotter 模块中 add_dos_dict函数 进行画图;
7.5 bandDos能带和态密度共同显示
以应用教程中Si体系的 band.json
和 dos.json
为例子:
(1) 将能带和态密度显示在一张图上:
创建 banddosplot.py 文件,具体代码如下:
1# 导入pymatgen BSDOSPlotter 画图模块
2from pymatgen.electronic_structure.plotter import BSDOSPlotter
3# 导入dspawpy 读取DS-PAW band.json,dos.json模块
4from dspawpy.io import get_band_data,get_dos_data
5
6# 读取dos.json, 参数dos.json文件路径
7dos_data = get_dos_data("./data/dos.json")
8# 读取band.json, 参数band.json文件路径
9band_data = get_band_data("./data/band.json")
10
11bdp = BSDOSPlotter()
12
13# 绘制BandDos图,返回matplotlib.pyplot
14plt = bdp.get_plot(bs=band_data,dos=dos_data)
15
16# 保存png图片
17plt.savefig("banddos.png",img_format="png")
18# 显示图片
19plt.show()
知识点:
首先使用 dspawpy.io 中的 get_band_data 和 get_dos_data 模块获取 band.json 和 dos.json 的数据;
之后使用 BSDOSPlotter模块中的 get_plots函数 直接进行画图;
如果需要将投影能带和投影态密度画在一起,可以参考前面单独画图的代码。
执行代码可以得到以下能带态密度图:
7.6 potential势函数数据处理
以Si的slab模型的 potential.json
为例:
(1) 势函数转化为VESTA能够支持的三维显示格式:
创建 trans_VESTA.py 文件,具体代码如下:
1 import json
2 from dspawpy.io import write_VESTA_format
3
4 with open("./potential.json","r") as file:
5 potential= json.load(file)
6
7 write_VESTA_format(potential["AtomInfo"], [potential["Potential"]["TotalElectrostaticPotential"], potential["Potential"]], "DS-PAW.vesta")
第1,2行为需要导入的 python 库函数;
第4,5行为需要读取的 json 文件,这里
./potential.json
指的时读取当前路径下的potential.json
,如果需要读取其他的 json* 文件可以自行修改;第6行为执行 write_VESTA_format 函数,将数据保存为 VESTA 可识别的格式,其中
potential["AtomInfo"]
为读取potential.json
中的晶格及坐标信息, potential[“Potential”][“TotalElectrostaticPotential”] 为potential.json
中总的静电势的三维数据, “DS-PAW- potential.vesta” 表示将这些数据写入到 DS-PAW- potential.vesta 文件中;
VESTA展现的效果可以通过设置VESTA中Isosurface level数值来调节,具体步骤为VESTA-properties-Isosurfaces-Isosurface level
知识点:
使用 with open语法 加载需要处理的三维网格数据;
使用 write_VESTA_format函数 可以将三维数据保存为VESTA格式的数据,其中 potential[“AtomInfo”] 为晶格信息, potential[“Potential”][“TotalElectrostaticPotential”] 总的静电势的数据,之后将数据命名为 DS-PAW.vesta ;
write_VESTA_format 支持输出多个网格数据,例如想要保存总的和自旋静电势,命令如下:write_VESTA_format(potential[“AtomInfo”], [potential[“Potential”][“TotalElectrostaticPotential”], potential[“Potential”][“SpinElectrostaticPotential”]], ” DS-PAW.vesta “) ;
处理部分电荷密度文件pcharge.json时,最后一行代码应可参考write_VESTA_format(pcharge[“AtomInfo”], [pcharge[“Pcharge”][0][“TotalCharge”]], “DS-PAW-pcharge.vesta”)格式,其中[0]对应json文件中第1条待测能带电荷密度的三维数据,若需处理第2条能带该关键词应写作[1]。
执行代码可以得到VESTA支持的数据,将数据拽入VESTA中得到以下势函数三维图:
(2) 将三维势函数进行面内平均:
创建 plot _planar_macroscopic.py 文件,具体代码如下:
1import json
2import numpy as np
3from dspawpy.plot import plot_potential_along_axis
4
5with open("./potential.json","r") as file:
6 potential = json.load(file)
7
8grid = potential["AtomInfo"]["Grid"]
9pot= np.asarray(potential ["Potential"]["TotalElectrostaticPotential"]).reshape(grid,order="F")
10
11plt = plot_potential_along_axis(pot,axis=2,smooth=False)
12plt.legend()
13plt.show()
第1,2,3行为需要导入的 python 库函数,这里用到了 dspawpy.io 中的
plot_potential_along_axis
函数;第5,6行为需要读取的 json 文件,这里
./potential.json
指的时读取当前路径下的potential.json
,如果需要读取其他的 json 文件可以自行修改;第8行为获取grid,其中 potential[“AtomInfo”][“Grid”] 为读取
potential.json
中的晶格及坐标信息;第9行为执行 pot 函数,其中 potential[“Potential”][“TotalLocalPotential”] 为读取
potential.json
中的局部势能信息,第11行调用 plot_potential_along_axis 函数作图, smooth=False 则不作宏观平均图;
第12行为设置图例;
第13行为显示图片
知识点:
进行面内平均及宏观平均时需要使用到 numpy 的库;
DS-PAW软件中三维的数据都是按照一维的格式保存的,因此需要使用 np.asarray函数 将一维数据还原成3维数据;
之后使用 plot_potential_along_axis 将某两个维度进行求平均,之后将剩下的维度数据进行绘图;
plot_potential_along_axis的第一个变量为三维格点数据,第二个为沿着某个维度画图,将另外两个维度求平均,第三个参数为是否绘制宏观平均的曲线,第四个参数为宏观平均算法中的权重;
执行代码可以得到以下势函数图:
7.7 elf电子局域密度数据处理
以快速入门Si电子局域密度计算计算得到的 elf.json
为例:
在计算目录中新建一个 trans_elf.py 文件,内容如下:
1 import json
2 from dspawpy.io import write_VESTA_format
3
4 with open("./elf.json","r") as file:
5 elf = json.load(file)
6
7 write_VESTA_format (elf ["AtomInfo"], [elf ["ELF"]["TotalELF"]], "DS-PAW-elf.vesta")
第1,2行为需要导入的 python 库函数
第4,5行为需要读取的 json 文件,这里
./elf.json
指的时读取当前路径下的elf.json
,如果需要读取其他的 json 文件可以自行修改;第7行为执行 write_VESTA_format 函数,将数据保存为 VESTA 可识别的格式,其中 elf[“AtomInfo”] 为读取
elf.json
中的晶格及坐标信息, elf [“ELF”][“TotalELF”] 为读取elf.json
中总的局域电荷密度的三维数据, DS-PAW- elf.vesta 表示将这些数据写入到 DS-PAW- elf.vesta 文件中;
执行 python trans_ elf.py ;
得到转换后的文件
DS-PAW-elf.vesta
,将其重命名为elf.vasp
以便在 VESTA 显示;将
elf.vasp
文件拖入 VESTA 中则可得到如下的势能图,展现的效果可以通过设置VESTA中 Isosurface level 数值来调节,具体步骤为 VESTA-properties-Isosurfaces-Isosurface level 。
7.8 pcharge部分电荷密度数据处理
以快速入门石墨烯部分电荷密度计算得到的 pcharge.json
为例:
在计算目录中新建一个 trans_pcharge.py 文件,内容如下:
1import json
2from dspawpy.io import write_VESTA_format
3
4with open("./pcharge.json","r") as file:
5 pcharge= json.load(file)
6
7write_VESTA_format(pcharge["AtomInfo"], [pcharge["Pcharge"][0]["TotalCharge"]], "DS-PAW-pcharge.vesta")
第1,2行为需要导入的 python 库函数
第4,5行为需要读取的 json 文件,这里
./pcharge.json
指的时读取当前路径下的pcharge.json
,如果需要读取其他的 json 文件可以自行修改;第7行为执行 write_VESTA_format 函数,将数据保存为 VESTA 可识别的格式,其中 pcharge[“AtomInfo”] 为读取
pcharge.json
中的晶格及坐标信息, pcharge[“Pcharge”][0][“TotalCharge”] 为pcharge.json
中第1条待测能带电荷密度的三维数据,此例中为能带4的数据,若写作 pcharge[“Pcharge”][1][“TotalCharge”] 则读取能带5的数据, DS-PAW-pcharge.vesta 表示将这些数据写入到 DS-PAW-pcharge.vesta 文件中;
执行 python trans_pcharge.py ;
得到转换后的文件
DS-PAW-pcharge.vesta
,将其重命名为pcharge.vasp
以便在 VESTA 显示;将
pcharge.vasp
文件拖入 VESTA 中则可得到如下的势能图,展现的效果可以通过设置vesta中 Isosurface level 数值来调节,具体步骤为 vesta-properties-Isosurfaces-Isosurface level 。
7.9 optical光学性质数据处理
以快速入门Si体系光学性质计算得到的 optical.json
为例:
(1) 反射率数据处理:
创建 optical.py 文件,具体代码如下:
1import matplotlib.pyplot as plt
2from dspawpy.plot import plot_optical
3
4plot_optical("./optical.json","Reflectance",index=0)
5
6plt.xlabel('Photon energy (eV)', fontsize=16)
7plt.ylabel('Reflectance', fontsize=16)
8plt.tick_params(labelsize=16)
9
10plt.savefig("optical.png",img_format="png")
11plt.show()
第1,2行为需要导入的 python 库函数;这里用到了 matplotlib 库,以及我们自己写的 dspawpy.plot 中的 plot_optical 模块
第4行调用 plot_optical 处理
optical.json
文件中 Reflectance 部分的数据,其中 Reflectance 为optical.json
文件中的部分数据,这里用户可以根据需要自行修改,若需要处理其他光学性质的数据,可替换该参数为 AbsorptionCoefficient 或 ExtinctionCoefficient 或 RefractiveIndex第6-8行设置x轴y轴的名称以及标签字体大小
第9行为保存图片的名称和格式,这里将数据保存为png格式命名为 optical.png
第10行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将该行注释,之后打开 optical.png 文件查看。
知识点:
Reflectance为光学性质中的一种,用户可以根据自己的需求将该关键词修改为“AbsorptionCoefficient”或”ExtinctionCoefficient”或”RefractiveIndex”,分别对应吸收系数、消光系数和折射率;
执行代码可以得到以下反射率随能量变化的曲线:
7.10 neb过渡态计算数据处理
以快速入门Pt体系的过渡态计算得到的 neb.json
为例:
(1) 输入文件之生成中间构型:
创建 neb_structure.py 文件,具体代码如下:
1from dspawpy.io.structure import from_dspaw_as
2from dspawpy.diffusion.neb import NEB,write_neb_structures
3
4#导入初态构型
5init_struct = from_dspaw_as("./structure00.as")
6#导入末态构型
7final_struct = from_dspaw_as("./structure06.as")
8
9#设置插点个数
10neb = NEB(init_struct,final_struct,5)
11structures = neb.idpp_interpolate()
12
13#修改文件夹存储路径
14write_neb_structures(structures,True,"as","./neb")
知识点:
用户可以根据需要自行修改插点个数,设置为任意插值的序号即可
执行代码可以得到包含7个结构文件的文件夹,其中新生成的中间构型为5个。
(2) 过渡态计算数据处理:
创建 neb.py 文件,具体代码如下:
1import json
2from pymatgen.core import Structure
3from pymatgen.io.vasp import Poscar
4from dspawpy.io.structure import to_file,from_hzw,from_dspaw_as,from_dspaw_atominfo
5from dspawpy.diffusion.neb import NEB,write_neb_structures,plot_neb_barrier,plot_neb_converge
6import matplotlib.pyplot as plt
7
8plot_neb_barrier("./neb.json")
9plt.xlabel('Reaction Coordinate',fontsize=16)
10plt.ylabel('Energy (eV)',fontsize=16)
11plt.tick_params(labelsize = 16)
12plt.savefig("neb_reaction_coordinate.png",img_format="png")
13plt.show()
14
15plot_neb_converge("./neb.json","03")
16plt.savefig("neb_ionic_step.png",img_format="png")
17plt.show()
第1-6行为需要导入的 python 库函数
第8行为调用 plot_neb_barrier 函数处理 json 文件作反应势垒图,这里 ./neb.json 指的时读取当前路径下的 neb.json
第9-11行设置x轴y轴的名称以及标签字体大小
第12行为保存图片的名称和格式,这里将数据保存为png格式命名为 neb_reaction_coordinate.png
第13行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将该行注释,之后打开 neb_reaction_coordinate.png 文件查看
第15行为调用 plot_neb_converge 函数处理 json 文件作 03 构型的弛豫受力图
第16行为保存图片的名称和格式
第17行为显示图片
知识点:
作能量和力在离子弛豫过程中的变化曲线时,03为处理插入的第3个构型的数据,这里用户可以根据需要自行修改,设置为任意插值的序号即可;
执行代码可以得到以下能量随反应路径变化曲线:
7.11 phonon声子计算数据处理
以Au体系的声子能带态密度计算得到的 phonon.json
为例:
(1) 声子能带数据处理:
创建 phonon_bandplot.py 文件,具体代码如下:
1from pymatgen.phonon.plotter import PhononBSPlotter
2from dspawpy.io import get_phonon_band_data
3
4band_data = get_phonon_band_data("./phonon.json")
5
6bsp = PhononBSPlotter(band_data)
7plt = bsp.get_plot()
8
9plt.savefig("phonon_bandplot.png",img_format="png")
10plt.show()
第1、2行为需要导入的 python 库函数,这里用到了pymatgen中的 PhononBSPlotter 库,以及 dspawpy.io 中的
get_phonon_band_data
函数;第4行为读取
phonon.json
文件构造 band_data 这个结构体;第6行为调用 PhononBSPlotter 处理 band_data 数据;
第7行为使用
bsp
下的 get_plot 进行画图;第9行为保存图片的名称和格式,将数据保存为png格式命名为 phonon_bandplot.png ;
第10行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将该行注释,之后打开 phonon_bandplot.png 文件查看。
执行代码可以得到以下声子能带曲线:
(2) 声子态密度数据处理:
创建 phonon_dosplot.py 文件,具体代码如下:
1from pymatgen.phonon.plotter import PhononDosPlotter
2from dspawpy.io import get_phonon_dos_data
3
4dos = get_phonon_dos_data("phonon.json")
5
6dp = PhononDosPlotter()
7dp.add_dos("Phonon",dos)
8plt = dp.get_plot()
9
10plt.savefig("phonon_dosplot.png",img_format="png")
11plt.show()
执行代码可以得到以下声子态密度曲线:
7.12 aimd分子动力学模拟数据处理
以快速入门 \(H_{2}O\) 分子体系分子动力学模拟得到的 aimd.json
为例:
(1) 分子动力学模拟数据处理:
创建 aimd2pdb.py 文件,具体代码如下:
1import json
2from dspawpy.io.structure import from_dspaw_atominfos,to_pdb
3
4with open("./aimd.json","r") as file:
5 aimd = json.load(file)
6
7structures = from_dspaw_atominfos(aimd["Structures"])
8to_pdb(structures,"aimd.pdb")
第1,2行为需要导入的 python 库函数
第4,5行为需要读取的 json 文件,这里 ./aimd.json 指的是读取当前路径下的 aimd.json ,如果需要读取其他的 json 文件可以自行修改
第7行为调用 from_dspaw_atominfos 处理 structure 的数据
第8行将处理的数据转为 pdb 格式
执行代码可以得到包含体系原子径向分布信息的文件 aimd.pdb ,得到通用轨迹pdb文件后,就可以利用vmd等分子动力学后处理软件进行分析。 例如VMD中处理RDFs操作步骤:File - New Molecule - browse - open - Load - Extensions - Analysis - Radial Pair Distribution Function g(r) - Selection 1: element H , selction 2: element O - compute g(r)